=(4,6,'pencil',3.2+4.6j,[3,4]) a
튜플
리스트 vs 튜플
-
컨테이너형타입이라는 점, 그리고 연산 및 인덱싱을 하는 방법은 리스트와 같음
차이점1: [] 대신에 ()를 사용
차이점2: 불변형이다. (원소의 값을 바꿀 수 없음)
차이점3: 하나의 원소를 선언할 때는 (1,)와 같이 해야 한다.
차이점4: 의미가 명확할때는 튜플의 ()를 생략가능하다.
컨테이너형이라는 것이 무슨의미?
type(a[3])
complex
type(a[2])
str
-
불변형이라는 것은 무슨 의미?
2] = 'Pencil' a[
TypeError: 'tuple' object does not support item assignment
참고로 a를 튜플이 아니라 리스트로 선언하면 값이 잘 바뀐다.
-
하나의 원소로 이루어진 튜플을 만들때는 쉼표를 붙여야함
1]+[2,3,4] [
[1, 2, 3, 4]
1)+(2,3,4) # int형+tuple형 이므로 계산 불가 (
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
type(1)
int
1,)+(2,3,4) (
(1, 2, 3, 4)
-
마지막차이점! 의미가 명확할때 튜플의 괄호는 생략가능하다. (중요)
=(1,2)
a a
(1, 2)
의미가 명확할때 생략해야함
1,2 + 3,4,5
(1, 5, 4, 5)
1,2)+(3,4,5) (
(1, 2, 3, 4, 5)
선언
-
소괄호를 이용
=(1,2,3)
a a
(1, 2, 3)
type(a)
tuple
-
생략가능하다는 점이 포인트
=1,2,3
a a
(1, 2, 3)
type(a)
tuple
-
원소가 하나인 튜플을 만들고 싶다면?
=(1,)
a a
(1,)
연산
-
리스트와 동일
1,2)+(3,4,5) (
(1, 2, 3, 4, 5)
1,2)*2 (
(1, 2, 1, 2)
인덱싱
-
리스트와 동일
=(1,2,3,-4,-5)
a a
(1, 2, 3, -4, -5)
-1] a[
-5
-3:] a[
(3, -4, -5)
튜플고급
튜플은 왜 불변함으로 만들었을까?
- 책의설명: 실수로 값이 변경되는 것을 방지할 수 있다.
- shaaly copy / deep copy 를 막을 수 있는 무기
튜플을 슬기롭게 사용하는 방법 (★★★★★)
-
예제: 여러변수를 동시에 출력하고 싶을 경우 (다중출력?)
변수를 아래와 같이 선언하였다고 하자.
=1
a=2
b=3 c
선언된 값을 확인하려면?
a
1
b
2
c
3
튜플을 이용하면?
#괄호하나 생략하는 것이 편함 a,b,c
(1, 2, 3)
-
예제: 다중할당1 (여러개의 변수를 동시에 선언하고 싶을 경우)
= 'Tom', 20, 'M', 180, 70 name, age, sex, height, weight
name, age, sex, height, weight
('Tom', 20, 'M', 180, 70)
height
180
-
예제: 다중할당2, 위도와 경도
= (37,127) #서울
coor coor
(37, 127)
long = coor # (왼쪽) 가로가 생략된 튜플 lat,
lat
37
long
127
-
잠깐만: 다중할당은 꼭 튜플에서만 가능한가?
= [1,2,3]
[x,y,z] # 다중출력 x,y,z
(1, 2, 3)
= 'hi'
[x,y] x,y
('h', 'i')
튜플과 같이 사용하면 가독성이 극대화 (그래서 다중할당은 거의 튜플과 세트로 사용함)
=1,2,3
x,y,z x,y,z
(1, 2, 3)
-
예제: 임시변수 사용없이 두 변수의 값을 교환
=10
a=20 b
= b,a a,b
a
20
b
10
-
예제: for문과 튜플
= [['boram', 202212345, 'F'],
lst 'iu',202212365,'F'],
['hodong',202215323,'M']]
[ lst
[['boram', 202212345, 'F'], ['iu', 202212365, 'F'], ['hodong', 202215323, 'M']]
for i in lst:
print(i)
['boram', 202212345, 'F']
['iu', 202212365, 'F']
['hodong', 202215323, 'M']
for name, studentid, sex in lst:
print(name)
boram
iu
hodong
for name, studentid, sex in lst:
print(name, sex)
boram F
iu F
hodong M
-
예제: for문과 튜플, dummy variable _
for name, studentid, sex in lst:
print(name)
boram
iu
hodong
for name, _, _ in lst:
print(name) #name만 관심있으므로 그 외는 언더바를 통해 작성하는 편리함
boram
iu
hodong
for name, _ in lst:
print(name)
ValueError: too many values to unpack (expected 2)
for name, *args in lst: # *args 를 통해 위 오류 해결
print(name)
boram
iu
hodong
-
예제: 튜플과 언패킹연산자 *
*tail = range(1,11)
head, body, head, body, tail
(1, 2, [3, 4, 5, 6, 7, 8, 9, 10])
*body, tail1, tail2, tail3 = range(1,11)
head1, head2, head1, head2, body, tail1, tail2, tail3
(1, 2, [3, 4, 5, 6, 7], 8, 9, 10)
*body, tail1, *tail2, *tail3 = range(1,11) #명확하지 않아서 오류남 head1,
SyntaxError: multiple starred expressions in assignment (2478039376.py, line 1)
*head, body, tail1, tail2, tail3 = range(1,11)
head, body, tail1
([1, 2, 3, 4, 5, 6], 7, 8)
(관찰)
head1, head2, body, tail1, tail2, tail3 = (1, 2, [3, 4, 5, 6, 7], 8, 9, 10)
head1, head3, *body, tail1, tail2, tail3 = (1,2, 3,4,5,6,7, 8, 9, 10)
*
를 붙이면 1차원 자료구조가 풀린다!
*[1,2,3]
SyntaxError: can't use starred expression here (386627056.py, line 1)
print([1,2,3])
[1, 2, 3]
print(*[1,2,3]) # 풀린다!!!
1 2 3
-
예제: 함수의 입력으로 *args
를 넣을때
[예비학습] 함수 벼락치기
def myadd(a,b):
return a+b
3,4) myadd(
7
3,-3) myadd(
0
예제: 두 점 사이의 거리를 구하는 함수를 만들어 보자.
점 \(p=(p_x,p_y)\) 와 \(q=(q_x,q_y)\)의 거리는 \(\sqrt{(p_x-q_x)^2, (p_y-q_y)^2}\)이다. 이것을 계산하는 프로그램을 만들자
import numpy as np
def dist(px,py,qx,qy):
return np.sqrt((px-qx)**2 + (py-qy)**2)
0,3,4,0) # 헷갈려 dist(
5.0
=(0,3)
p=(4,0)
q dist(p,q)
TypeError: dist() missing 2 required positional arguments: 'qx' and 'qy'
(방법1)
= p #또는(0,3)
px, py = (4,0)
qx, qy dist(px,py,qx,qy)
5.0
(방법2)
def dist2(p, q):
= p
px, py = q
qx, qy return np.sqrt((px-qx)**2 + (py-qy)**2)
#def dist2(p, q):
# px=p[0]
# py=p[1]
# qx=q[0]
# qy=q[1]
# return np.sqrt((px-qx)**2 + (py-qy)**2)
=(0,3)
p=(4,0)
q dist2(p,q)
5.0
(방법3)
*p, *q) # 입력을 *(px,py), *(qx, qy) 형태로 넣기도 하고 dist(
5.0
# 입력을 px,py,qx,qy 형태로 넣기도 하고 dist(px, py, qx, qy)
5.0
(숙제) 원소로 자기학번을 포함하는 튜플을 만들기 (길이가 1인 튜플)
type((202250926,))
tuple
len((202250926,))
1
ㅁ